package com.seu.me.lock;

import redis.clients.jedis.Jedis;

/**
 * @author liangfeihu
 * @since 2019/6/11
 */
public class RedisLockV1 {


    /**
     * 使用redis的setnx命令实现获取分布式锁
     *
     * @param lockKey    可以就是锁
     * @param requestId  请求ID，保证同一性
     * @param expireTime 过期时间，避免死锁(单位秒)
     * @return
     */
    public static boolean getLock(Jedis jedis, String lockKey, String requestId, int expireTime) {
        Long result = jedis.setnx(lockKey, requestId);
        if (result == 1) {
            jedis.expire(lockKey, expireTime);
            return true;
        }

        return false;
    }

    /**
     * 释放分布式锁
     *
     * @param lockKey
     * @param requestId
     */
    public static void releaseLock(Jedis jedis, String lockKey, String requestId) {
        if (requestId.equals(jedis.get(lockKey))) {
            jedis.del(lockKey);
        }
    }

}
